package commomgame;


import java.util.ArrayList;

/**
 *Classe que representa a instância do baralho do jogo.
 * Essa o objeto dessa classe se refere ao baralho utilizado no jogo,
 * logo, esta é composta 52 cartas as quais são objetos da classe Carta.
 * Com isso, a classe Deck é composta por um Array de 52 cartas.
 * 
 * @author Fernanda & Igo
 */
public class Deck {

    private ArrayList<Card> listOfCards = new ArrayList<Card>();

/**
 * O construtor dessa classe é responsável por chamar os métodos que irá efetivamente criar o baralho.
 * Ou seja, esses métodos serão responsáveis por criar todas as cartas do baralho, definindo seus nipes e valores.
 */
    public Deck() {
        this.setNipeClub();
        this.setNipeDiamond();
        this.setNipeHeart();
        this.setNipeSpade();
    }

    /**
     * Retorna um conjunto de cartas construído para o baralho.
     * @return ArrayList de objetos Card
     */
    public ArrayList<Card> getListOfCards() {
        return listOfCards;
    }

    /**
     *Define um conjunto de cartas para o baralho.
     * @param listOfCards ArrayList de objetos Card.
     */
    public void setListOfCards(ArrayList<Card> listOfCards) {
        this.listOfCards = listOfCards;
    }


    

    /**
     * Cria as 13 cartas de nipe Spade e valores de 1 a 13, As a K.
     * 
     */
    private void setNipeSpade() {

        for (int i = 0; i < 13; i++) {
            Card card = new Card("spade", i + 1);

            this.addCardInDeck(card);
        }

    }

    /**
     * Cria as 13 cartas de nipe Heart e valores de 1 a 13, As a K.
     * 
     */
    private void setNipeHeart() {

        for (int i = 0; i < 13; i++) {

            Card card = new Card("heart", i+ 1);

            this.addCardInDeck(card);
        }
    }

    /**
     * Cria as 13 cartas de nipe Diamond e valores de 1 a 13, As a K.
     */
    private void setNipeDiamond() {

        for (int i = 0; i < 13; i++) {

            Card card = new Card("diamond", i+ 1);

            this.addCardInDeck(card);
        }
    }

    /**
     * Cria as 13 cartas de nipe Club e valores de 1 a 13, As a K.
     */
    private void setNipeClub() {

        for (int i = 0; i < 13; i++) {

            Card card = new Card("club", i+ 1);

            this.addCardInDeck(card);
        }
    }

    /**
     * Método que adiciona carta ao baralho
     * @param card Objeto de carta a ser inserido no baralho.
     */

    private void addCardInDeck(Card card){
        this.listOfCards.add(card);
    
    }


    /**
     * Método para embaralhar baralho
     */
    public void shuffle(){ 
        java.util.Collections.shuffle(listOfCards); 
    }
}
